package com.huangsm.concurrence.atomic;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 原子性整型
 * @author huang
 * @PACKAGE_NAME com.huangsm.concurrence.atomic
 * @PROJECT_NAME concurrence
 * @date 2019/2/15
 */
public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger atomicInteger=new AtomicInteger();
        atomicInteger.set(10);
        atomicInteger.get();
        int i = atomicInteger.addAndGet(10);
        System.out.println(i);
        AtomicInteger atomicInteger1 = new AtomicInteger(123);

        int expectedValue = 123;
        int newValue      = 234;
        atomicInteger1.compareAndSet(expectedValue, newValue);
        /**
         * AtomicInteger 类包含有一些方法，通过它们你可以增加 AtomicInteger 的值，并获取其值。这些方法如下：
         * addAndGet()
         * getAndAdd()
         * getAndIncrement()
         * incrementAndGet()
         *
         * 第一个 addAndGet() 方法给 AtomicInteger 增加了一个值，然后返回增加后的值。getAndAdd() 方法为 AtomicInteger 增加了一个值，
         * 但返回的是增加以前的 AtomicInteger 的值。具体使用哪一个取决于你的应用场景。
         */
        System.out.println(atomicInteger.getAndAdd(10));
        System.out.println(atomicInteger.addAndGet(10));
        /**
         * AtomicInteger 类还提供了一些减小 AtomicInteger 的值的原子性方法。这些方法是：
         * decrementAndGet()
         * getAndDecrement()
         * decrementAndGet() 将 AtomicInteger 的值减一，并返回减一后的值。getAndDecrement() 也将 AtomicInteger 的值减一，但它返回的是减一之前的值。
         */
    }
}
